
package com.huaweicloud.saaslanding.install.util.nacos;

import com.huaweicloud.saaslanding.huawei.nacos.api.NacosNamespaceApi;
import com.huaweicloud.saaslanding.huawei.nacos.response.NacosNamespaceResponse;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;

import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 命名空间util
 *
 * @since 2022-11-01
 */
public class NacosNamespaceUtil {

    /**
     * 获取namespace信息,不存在时创建
     *
     * @param configAddress
     * @param namespace
     * @return
     */
    public static NacosNamespaceResponse get(String configAddress, String namespace) {
        // 获取nacos信息
        NacosNamespaceResponse nacosNamespaceResponse = getById(configAddress, namespace);

        // 创建namespace
        if (ObjectUtil.isNull(nacosNamespaceResponse)) {
            nacosNamespaceResponse = create(configAddress, namespace);
        }
        return nacosNamespaceResponse;
    }

    private static NacosNamespaceResponse create(String configAddress, String namespace) {
        NacosNamespaceApi.create(configAddress, namespace, namespace);
        return getById(configAddress, namespace);
    }

    /**
     * 根据namespace获取命名空间信息
     *
     * @param configAddress
     * @param namespace
     * @return
     */
    public static NacosNamespaceResponse getById(String configAddress, String namespace) {
        List<NacosNamespaceResponse> nacosNamespaceResponseList = NacosNamespaceApi.list(configAddress);
        if (CollectionUtil.isNotEmpty(nacosNamespaceResponseList) && StringUtils.isNotBlank(namespace)) {

            List<NacosNamespaceResponse> filter = nacosNamespaceResponseList.stream()
                .filter(nacos -> nacos.getNamespace().equals(namespace))
                .collect(Collectors.toList());

            if (CollectionUtil.isNotEmpty(filter)) {
                return filter.get(0);
            }
        }
        return null;
    }

}
